/*题目：编写一个程序，将一个任意进制的字符串格式数值（不需要测试该数是否合法测试
用例会保证数值满足进制要求，字符串长度最长不超过 64）转换为十进制数值，并打印出
来。思路：假设 1FF，拿到 1 字符，对应到数值 1，然后 dec=1,拿到 F，对应 15，然后
dec=dec*16+15，再拿到 F，就是 dec=dec*16+15
输入格式：
输入的每一行中给出一个整数 n（2<=n<=16），一个对应的 n 进制数值字符串 str（超过
10 的依次使用 A、B、C、D、E、F），整数 n 和数值字符串 str 中间用空格隔开。
输出格式：
输出对应行的 10 进制数值。
输入样例：
16 1FF
2 1111
8 17
12 AB
输出样例：
511
15
15
131
*/
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
   
unsigned long convertToDecimal(const char *str, int base) {  
    unsigned long result = 0;  
    int len = strlen(str);  
      
    for (int i = 0; i < len; i++) {  
        char c = str[i];  
        if (c >= '0' && c <= '9') {  
            result = result * base + (c - '0');  
        } else if (c >= 'A' && c <= 'F') {  
            result = result * base + (c - 'A' + 10);  
        } else if (c >= 'a' && c <= 'f') {  
            result = result * base + (c - 'a' + 10);  
        }  
    }  
      
    return result;  
}  
  
int main() {  
    int base;  
    char str[65];
    
    while (scanf("%d %s", &base, str) != EOF) {  
        if (base < 2 || base > 16) {  
            printf("Invalid base!\n");  
            continue;  
        }  
  
        unsigned long decimal = convertToDecimal(str, base);  
        printf("%lu\n", decimal);  
    }  
  
    return 0;  
}
